package com.kim.store.mapper;

import com.kim.store.entity.Address;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 收获地址持久层的接口
 * 为什么要统计用户id收获地址数量？
 * 在插入用户收获地址数据时，应先查询用户id收获地址的数量
 * 不能超过20个用户id收获地址
 * 为什么这么做呢？
 * 原因是 大厂都这么做！！
 */
public interface AddressMapper {

    /**
     * 插入用户的收获地址数据
     * @param address 收获地址数据
     * @return 受影响的行数
     */
    Integer insert(Address address);

    /**
     * 根据用户的id统计收获地址数量
     * @param uid 用户的id
     * @return 当前用户收获地址的数量
     */
    Integer countByUid(Integer uid);

    /**
     * 根据用户的id查询收货地址数据
     * @param uid 用户id
     * @return 用户收货地址数据
     */
    List<Address> finByUid(Integer uid);

    /**
     * 根据aid查询收货地址数据
     * @param aid 收货地址aid
     * @return 返回收货地址数据，如果没找到返回null
     */
    Address findByAid(Integer aid);

    /**
     * 根据用户的uid来修改用户的收货地址设置为非默认
     * @param uid 用户uid
     * @return 返回的是受影响的行数
     */
    Integer updateNonDefault(Integer uid);

    /**
     * 设置用户收货地址的默认地址
     * @param aid 用户aid
     * @param username 用户的修改名字
     * @param time 用户的修改时间
     * @return 返回的是受影响的行数
     */
    Integer updateDefaultByAid(
                               Integer aid,
                               @Param("modifiedUser") String username,
                               @Param("modifiedTime") Date time);

    /**
     * 根据收货地址aid删除收货地址数据
     * @param aid 收货地址的aid
     * @return 返回受影响的行数
     */
    Integer deleteByAid(Integer aid);

    /**
     * 根据用户uid查询当前用户最后一次被修改的收货地址数据
     * @param uid 用户id
     * @return 收货地址
     */
    Address findLastModified(Integer uid);

    /**
     * 修改收货地址
     * @param address 修改数据
     * @return 返回受影响的行数
     */
    Integer updateAddressByAid(Address address);
}
